<?php

/**
 * Description of x10_Observer_MethodProvider
 *
 * @author prometheus
 */
class x10_Observer_MethodProvider extends x10_Provider
{
	public $xName = 'Megfigyelt metódus: ';

	public $methodName = '';

	public $callback;

	public $onBefore = FALSE;

	public $onAfter = FALSE;

	/**
	 * Konstruktor.
	 * Eltárolja a szolgáltató beállításait a {@link setConfig} metódus
	 * hívásával.
	 * @param x10_Config $config Array típusban nyers beállításokat vár
	 * asszociatív tömbben, String típusban érvényes JSON fájl elérési útját
	 * @throws E_Provider_ConfigNotExists
	 * @throws E_Provider_ConfigParseError
	 */
	public function __construct(x10_Config $config)
	{
		parent::__construct($config);
		$this->methodName = $config->getConfigKey('methodName');
		$this->callback = $config->getConfigKey('callback');
		$this->onBefore = $config->getConfigKey('onBefore');
		$this->onAfter = $config->getConfigKey('onAfter');
		$this->xName .= isset($this->methodName)? $this->methodName : '???';
	}

	public function get()
	{
		return array(
			'methodName'	=> $this->methodName,
			'callback'		=> $this->callback,
			'onBefore'		=> $this->onBefore,
			'onAfter'		=> $this->onAfter
		);
	}

	public function __toString()
	{
		$data = $this->get();
		$result = '';
		
		// -> methodName
		$result .= '[methodName: '.$data['methodName'].', ';
		// -> callback
		$callback = '???';
		if (is_string($data['callback'])) $callback = $data['callback'];
		else if (is_array($data['callback']) and count($data['callback'])) $callback = '['.get_class($data['callback'][0]).']->'.$data['callback'][1];
		$result .= 'callback: '.$callback.', ';
		// -> onBefore
		$result .= 'onBefore: '.($data['onBefore']? 'TRUE' : 'FALSE').', ';
		// -> onAfter
		$result .= 'onAfter: '.($data['onAfter']? 'TRUE' : 'FALSE').']';

		return $result;
	}
}

?>